home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1999 March
/
EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso
/
earcd
/
-archivi
/
-recent2
/
cp4.lha
/
cp4
/
c2p_src
/
c2p_windowamigaasm.asm
< prev
next >
Wrap
Assembly Source File
|
1998-11-25
|
73KB
|
4,951 lines
* :ts=8 c2p_windowamigaasm.asm
*
* Copyright (C) 1997 Zavacki Ferenc
* For any further information mail to:
* zavacki@dragon.klte.hu
*
*
*void REGARGS c2pfull( REG(a0,void *chunkyaddr),
* REG(a1,void *planaraddr));
*void REGARGS c2pdelta( REG(a0,void *chunkyaddr),
* REG(a1,void *deltaaddr),
* REG(a2,void *planaraddr) );
* Init
*
*int REGARGS c2pinit( REG(d0,int planewidth),
* REG(a0,unsigned char *linedeltavec),
* REG(d1,int planes) );
xdef _c2pinit ; d0-planewidth (in bytes)
xdef _c2pfull ; full version
xdef _c2pdelta ; delta version
xref _c ; *b
xref _PenTable ; *b
CHUNKY_BUFFER_WIDTH equ 352
CHUNKY_BUFFER_HEIGHT equ 283
_c2pinit move.l a0,C2P_LineSkipBufferAddress
move.l d0,C2P_BitplaneByteWidth
clr.l d0
cmp.b #1,d1
beq .1
cmp.b #2,d1
beq .2
cmp.b #3,d1
beq .3
cmp.b #4,d1
beq .4
cmp.b #5,d1
beq .5
cmp.b #6,d1
beq .6
cmp.b #7,d1
beq .7
cmp.b #8,d1
beq .8
moveq #-1,d0
rts
.1 move.l #f_1,C2P_FullRoutine
move.l #d_1,C2P_DeltaRoutine
rts
.2 move.l #f_2,C2P_FullRoutine
move.l #d_2,C2P_DeltaRoutine
rts
.3 move.l #f_3,C2P_FullRoutine
move.l #d_3,C2P_DeltaRoutine
rts
.4 move.l #f_4,C2P_FullRoutine
move.l #d_4,C2P_DeltaRoutine
rts
.5 move.l #f_5,C2P_FullRoutine
move.l #d_5,C2P_DeltaRoutine
rts
.6 move.l #f_6,C2P_FullRoutine
move.l #d_6,C2P_DeltaRoutine
rts
.7 move.l #f_7,C2P_FullRoutine
move.l #d_7,C2P_DeltaRoutine
rts
.8 move.l #f_8,C2P_FullRoutine
move.l #d_8,C2P_DeltaRoutine
rts
*-------------------------------------------------------------------------------
* Main enrty1
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitnepwithbzte
_c2pfull jmp ([C2P_FullRoutine])
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* Main enrty2
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - LineSkip Buffer AddrESS
* d0.l - BitBPlaneyBterwidth.B
_c2pdelta movem.l d0/a3-a5,-(sp)
move.l #_PenTable,a3 ; a3 - PenTable.l (~)
move.l a0,a4 ; a4 - PenArray.b (p)
move.w #6204,d0
move.l _c,a5 ; a5 - chunky.b (c)
clr.l d1
.cik move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
move.b (a5)+,d1
move.b (a3,d1.l),(a4)+
dbf d0,.cik
movem.l (sp)+,d0/a3-a5
jmp ([C2P_DeltaRoutine])
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitplane Byte Width
f_1 movem.l d2-d7/a2-a3,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_PlanarBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_PlanarBufferAddress,pc),a1
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a2
move.l (C2P_BitplaneByteWidth,pc),d7
move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #3,d0
and.l d5,d1
lsl.l #2,d1
and.l d5,d2
lsl.l #1,d2
and.l d5,d3
or.l d0,d3
or.l d1,d3
or.l d2,d3
move.l d3,a3
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.1 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.l a3,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #3,d0
and.l d5,d1
lsl.l #2,d1
and.l d5,d2
lsl.l #1,d2
and.l d5,d3
or.l d0,d3
or.l d1,d3
or.l d2,d3
move.l d3,a3
sub.l #1,d6
bne .2
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l),a1
.2 cmp.l a2,a0
bne .1
move.l a3,(a1)
movem.l (sp)+,d2-d7/a2-a3
rts
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - Line Skip Buffer Address
* d0.l - Bitplane Byte Width
d_1 movem.l d2-d7/a2-a4,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_DeltaBufferAddress)
move.l a2,(C2P_PlanarBufferAddress)
move.l a3,(C2P_LineSkipBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_DeltaBufferAddress,pc),a1
move.l (C2P_PlanarBufferAddress,pc),a2
move.l (C2P_LineSkipBufferAddress),a3
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a4
move.l (C2P_BitplaneByteWidth,pc),d7
.12 tst.b (a3)+
beq .14
add.l #CHUNKY_BUFFER_WIDTH,a0
add.l #CHUNKY_BUFFER_WIDTH,a1
add.l d7,a2
bra .13
.14 move.l #CHUNKY_BUFFER_WIDTH/32,d6
.11 cmp.l (a0)+,(a1)+
bne .1
cmp.l (a0)+,(a1)+
bne .2
cmp.l (a0)+,(a1)+
bne .3
cmp.l (a0)+,(a1)+
bne .4
cmp.l (a0)+,(a1)+
bne .5
cmp.l (a0)+,(a1)+
bne .6
cmp.l (a0)+,(a1)+
bne .7
cmp.l (a0)+,(a1)+
bne .8
.10 add.l #4,a2
sub.l #1,d6
bne .11
lea (-CHUNKY_BUFFER_WIDTH/8,a2,d7.l),a2
.13 cmp.l a4,a0
bne .12
movem.l (sp)+,d2-d7/a2-a4
rts
.1 sub.l #1*4,a0
add.l #7*4,a1
bra .9
.2 sub.l #2*4,a0
add.l #6*4,a1
bra .9
.3 sub.l #3*4,a0
add.l #5*4,a1
bra .9
.4 sub.l #4*4,a0
add.l #4*4,a1
bra .9
.5 sub.l #5*4,a0
add.l #3*4,a1
bra .9
.6 sub.l #6*4,a0
add.l #2*4,a1
bra .9
.7 sub.l #7*4,a0
add.l #1*4,a1
bra .9
.8 sub.l #8*4,a0
add.l #0*4,a1
bra .9
.9 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #3,d0
and.l d5,d1
lsl.l #2,d1
and.l d5,d2
lsl.l #1,d2
and.l d5,d3
or.l d0,d3
or.l d1,d3
or.l d2,d3
move.l d3,(a2)
bra .10
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitplane Byte Width
f_2 movem.l d2-d7/a2-a4,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_PlanarBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_PlanarBufferAddress,pc),a1
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a2
move.l (C2P_BitplaneByteWidth,pc),d7
move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
and.l d5,d0
lsl.l #2,d0
and.l d5,d2
or.l d0,d2
and.l d5,d1
lsl.l #2,d1
and.l d5,d3
or.l d1,d3
move.l #$55555555,d5
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d2,a3
move.l d3,a4
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.1 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.l a4,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a3,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
and.l d5,d0
lsl.l #2,d0
and.l d5,d2
or.l d0,d2
and.l d5,d1
lsl.l #2,d1
and.l d5,d3
or.l d1,d3
move.l #$55555555,d5
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d2,a3
move.l d3,a4
sub.l #1,d6
bne .2
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*2),a1
.2 cmp.l a2,a0
bne .1
move.l a4,(a1)
move.l a3,(a1,d7.l)
movem.l (sp)+,d2-d7/a2-a4
rts
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - Line Skip Buffer Address
* d0.l - Bitplane Byte Width
d_2 movem.l d2-d7/a2-a4,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_DeltaBufferAddress)
move.l a2,(C2P_PlanarBufferAddress)
move.l a3,(C2P_LineSkipBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_DeltaBufferAddress,pc),a1
move.l (C2P_PlanarBufferAddress,pc),a2
move.l (C2P_LineSkipBufferAddress),a3
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a4
move.l (C2P_BitplaneByteWidth,pc),d7
.12 tst.b (a3)+
beq .14
add.l #CHUNKY_BUFFER_WIDTH,a0
add.l #CHUNKY_BUFFER_WIDTH,a1
lea (a2,d7.l*2),a2
bra .13
.14 move.l #CHUNKY_BUFFER_WIDTH/32,d6
.11 cmp.l (a0)+,(a1)+
bne .1
cmp.l (a0)+,(a1)+
bne .2
cmp.l (a0)+,(a1)+
bne .3
cmp.l (a0)+,(a1)+
bne .4
cmp.l (a0)+,(a1)+
bne .5
cmp.l (a0)+,(a1)+
bne .6
cmp.l (a0)+,(a1)+
bne .7
cmp.l (a0)+,(a1)+
bne .8
.10 add.l #4,a2
sub.l #1,d6
bne .11
lea (-CHUNKY_BUFFER_WIDTH/8,a2,d7.l*2),a2
.13 cmp.l a4,a0
bne .12
movem.l (sp)+,d2-d7/a2-a4
rts
.1 sub.l #1*4,a0
add.l #7*4,a1
bra .9
.2 sub.l #2*4,a0
add.l #6*4,a1
bra .9
.3 sub.l #3*4,a0
add.l #5*4,a1
bra .9
.4 sub.l #4*4,a0
add.l #4*4,a1
bra .9
.5 sub.l #5*4,a0
add.l #3*4,a1
bra .9
.6 sub.l #6*4,a0
add.l #2*4,a1
bra .9
.7 sub.l #7*4,a0
add.l #1*4,a1
bra .9
.8 sub.l #8*4,a0
add.l #0*4,a1
bra .9
.9 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
and.l d5,d0
lsl.l #2,d0
and.l d5,d2
or.l d0,d2
and.l d5,d1
lsl.l #2,d1
and.l d5,d3
or.l d1,d3
move.l #$55555555,d5
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
move.l d2,(a2,d7.l)
lsl.l #1,d4
eor.l d4,d3
move.l d3,(a2)
bra .10
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitplane Byte Width
f_3 movem.l d2-d7/a2-a5,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_PlanarBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_PlanarBufferAddress,pc),a1
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a2
move.l (C2P_BitplaneByteWidth,pc),d7
move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #1,d0
and.l d5,d1
or.l d0,d1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d1,a3
move.l d2,a4
move.l d3,a5
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.1 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.l a5,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a4,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a3,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #1,d0
and.l d5,d1
or.l d0,d1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d1,a3
move.l d2,a4
move.l d3,a5
sub.l #1,d6
bne .2
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*2),a1
add.l d7,a1
.2 cmp.l a2,a0
bne .1
move.l a5,(a1)
move.l a4,(a1,d7.l)
move.l a3,(a1,d7.l*2)
movem.l (sp)+,d2-d7/a2-a5
rts
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - Line Skip Buffer Address
* d0.l - Bitplane Byte Width
d_3 movem.l d2-d7/a2-a4,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_DeltaBufferAddress)
move.l a2,(C2P_PlanarBufferAddress)
move.l a3,(C2P_LineSkipBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_DeltaBufferAddress,pc),a1
move.l (C2P_PlanarBufferAddress,pc),a2
move.l (C2P_LineSkipBufferAddress),a3
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a4
move.l (C2P_BitplaneByteWidth,pc),d7
.12 tst.b (a3)+
beq .14
add.l #CHUNKY_BUFFER_WIDTH,a0
add.l #CHUNKY_BUFFER_WIDTH,a1
lea (a2,d7.l*2),a2
add.l d7,a2
bra .13
.14 move.l #CHUNKY_BUFFER_WIDTH/32,d6
.11 cmp.l (a0)+,(a1)+
bne .1
cmp.l (a0)+,(a1)+
bne .2
cmp.l (a0)+,(a1)+
bne .3
cmp.l (a0)+,(a1)+
bne .4
cmp.l (a0)+,(a1)+
bne .5
cmp.l (a0)+,(a1)+
bne .6
cmp.l (a0)+,(a1)+
bne .7
cmp.l (a0)+,(a1)+
bne .8
.10 add.l #4,a2
sub.l #1,d6
bne .11
lea (-CHUNKY_BUFFER_WIDTH/8,a2,d7.l*2),a2
add.l d7,a2
.13 cmp.l a4,a0
bne .12
movem.l (sp)+,d2-d7/a2-a4
rts
.1 sub.l #1*4,a0
add.l #7*4,a1
bra .9
.2 sub.l #2*4,a0
add.l #6*4,a1
bra .9
.3 sub.l #3*4,a0
add.l #5*4,a1
bra .9
.4 sub.l #4*4,a0
add.l #4*4,a1
bra .9
.5 sub.l #5*4,a0
add.l #3*4,a1
bra .9
.6 sub.l #6*4,a0
add.l #2*4,a1
bra .9
.7 sub.l #7*4,a0
add.l #1*4,a1
bra .9
.8 sub.l #8*4,a0
add.l #0*4,a1
bra .9
.9 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #1,d0
and.l d5,d1
or.l d0,d1
move.l d1,(a2,d7.l*2)
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
move.l d2,(a2,d7.l)
lsl.l #1,d4
eor.l d4,d3
move.l d3,(a2)
bra .10
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitplane Byte Width
f_4 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_PlanarBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_PlanarBufferAddress,pc),a1
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a2
move.l (C2P_BitplaneByteWidth,pc),d7
move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.1 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
sub.l #1,d6
bne .2
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*4),a1
.2 cmp.l a2,a0
bne .1
move.l a6,(a1)
move.l a5,(a1,d7.l)
move.l a4,(a1,d7.l*2)
add.l d7,a1
move.l a3,(a1,d7.l*2)
movem.l (sp)+,d2-d7/a2-a6
rts
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - Line Skip Buffer Address
* d0.l - Bitplane Byte Width
d_4 movem.l d2-d7/a2-a4,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_DeltaBufferAddress)
move.l a2,(C2P_PlanarBufferAddress)
move.l a3,(C2P_LineSkipBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_DeltaBufferAddress,pc),a1
move.l (C2P_PlanarBufferAddress,pc),a2
move.l (C2P_LineSkipBufferAddress),a3
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a4
move.l (C2P_BitplaneByteWidth,pc),d7
.12 tst.b (a3)+
beq .14
add.l #CHUNKY_BUFFER_WIDTH,a0
add.l #CHUNKY_BUFFER_WIDTH,a1
lea (a2,d7.l*4),a2
bra .13
.14 move.l #CHUNKY_BUFFER_WIDTH/32,d6
.11 cmp.l (a0)+,(a1)+
bne .1
cmp.l (a0)+,(a1)+
bne .2
cmp.l (a0)+,(a1)+
bne .3
cmp.l (a0)+,(a1)+
bne .4
cmp.l (a0)+,(a1)+
bne .5
cmp.l (a0)+,(a1)+
bne .6
cmp.l (a0)+,(a1)+
bne .7
cmp.l (a0)+,(a1)+
bne .8
.10 add.l #4,a2
sub.l #1,d6
bne .11
lea (-CHUNKY_BUFFER_WIDTH/8,a2,d7.l*4),a2
.13 cmp.l a4,a0
bne .12
movem.l (sp)+,d2-d7/a2-a4
rts
.1 sub.l #1*4,a0
add.l #7*4,a1
bra .9
.2 sub.l #2*4,a0
add.l #6*4,a1
bra .9
.3 sub.l #3*4,a0
add.l #5*4,a1
bra .9
.4 sub.l #4*4,a0
add.l #4*4,a1
bra .9
.5 sub.l #5*4,a0
add.l #3*4,a1
bra .9
.6 sub.l #6*4,a0
add.l #2*4,a1
bra .9
.7 sub.l #7*4,a0
add.l #1*4,a1
bra .9
.8 sub.l #8*4,a0
add.l #0*4,a1
bra .9
.9 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
add.l d7,a2
move.l d0,(a2,d7.l*2)
sub.l d7,a2
lsl.l #1,d4
eor.l d4,d1
move.l d1,(a2,d7.l*2)
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
move.l d2,(a2,d7.l)
lsl.l #1,d4
eor.l d4,d3
move.l d3,(a2)
bra .10
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitplane Byte Width
f_5 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_PlanarBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_PlanarBufferAddress,pc),a1
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a2
move.l (C2P_BitplaneByteWidth,pc),d7
move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.1 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
sub.l #1,d6
bne .2
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*4),a1
add.l d7,a1
.2 cmp.l a2,a0
bne .1
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l a5,(-4,a1,d7.l)
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l a4,(-4,a1,d7.l*2)
move.l #$55555555,d5
and.l d5,d0
lsl.l #3,d0
and.l d5,d1
lsl.l #2,d1
and.l d5,d2
lsl.l #1,d2
and.l d5,d3
or.l d0,d3
or.l d1,d3
or.l d2,d3
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,a6
lea ([C2P_PlanarBufferAddress,pc],d7.l*4),a1
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.3 move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #3,d0
and.l d5,d1
lsl.l #2,d1
and.l d5,d2
lsl.l #1,d2
and.l d5,d3
or.l d0,d3
or.l d1,d3
or.l d2,d3
move.l d3,a6
sub.l #1,d6
bne .4
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*4),a1
add.l d7,a1
.4 cmp.l a2,a0
bne .3
move.l a6,(a1)
movem.l (sp)+,d2-d7/a2-a6
rts
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - Line Skip Buffer Address
* d0.l - Bitplane Byte Width
d_5 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_DeltaBufferAddress)
move.l a2,(C2P_PlanarBufferAddress)
move.l a3,(C2P_LineSkipBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a4
move.l a4,(C2P_ChunkyBufferEndAddress)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_DeltaBufferAddress,pc),a1
move.l (C2P_PlanarBufferAddress,pc),a2
move.l (C2P_LineSkipBufferAddress,pc),a3
move.l (C2P_BitplaneByteWidth,pc),d7
.12 tst.b (a3)+
beq .14
add.l #CHUNKY_BUFFER_WIDTH,a0
add.l #CHUNKY_BUFFER_WIDTH,a1
lea (a2,d7.l*4),a2
add.l d7,a2
bra .13
.14 move.l #CHUNKY_BUFFER_WIDTH/32,d6
.11 cmp.l (a0)+,(a1)+
bne .1
cmp.l (a0)+,(a1)+
bne .2
cmp.l (a0)+,(a1)+
bne .3
cmp.l (a0)+,(a1)+
bne .4
cmp.l (a0)+,(a1)+
bne .5
cmp.l (a0)+,(a1)+
bne .6
cmp.l (a0)+,(a1)+
bne .7
cmp.l (a0)+,(a1)+
bne .8
.10 add.l #4,a2
sub.l #1,d6
bne .11
lea (-CHUNKY_BUFFER_WIDTH/8,a2,d7.l*4),a2
add.l d7,a2
.13 cmp.l (C2P_ChunkyBufferEndAddress,pc),a0
bne .12
movem.l (sp)+,d2-d7/a2-a6
rts
.1 sub.l #1*4,a0
add.l #7*4,a1
bra .9
.2 sub.l #2*4,a0
add.l #6*4,a1
bra .9
.3 sub.l #3*4,a0
add.l #5*4,a1
bra .9
.4 sub.l #4*4,a0
add.l #4*4,a1
bra .9
.5 sub.l #5*4,a0
add.l #3*4,a1
bra .9
.6 sub.l #6*4,a0
add.l #2*4,a1
bra .9
.7 sub.l #7*4,a0
add.l #1*4,a1
bra .9
.8 sub.l #8*4,a0
add.l #0*4,a1
bra .9
.9 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d1,(a2,d7.l*2)
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a4
move.l d2,a5
move.l d3,a6
sub.l #8*4,a0
move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a2)
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l a5,(a2,d7.l)
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
add.l d7,a2
move.l a4,(a2,d7.l*2)
sub.l d7,a2
move.l #$55555555,d5
and.l d5,d0
lsl.l #3,d0
and.l d5,d1
lsl.l #2,d1
and.l d5,d2
lsl.l #1,d2
and.l d5,d3
or.l d0,d3
or.l d1,d3
or.l d2,d3
move.l d3,(a2,d7.l*4)
bra .10
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitplane Byte Width
f_6 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_PlanarBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_PlanarBufferAddress,pc),a1
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a2
move.l (C2P_BitplaneByteWidth,pc),d7
move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.1 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
sub.l #1,d6
bne .2
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*4),a1
add.l d7,a1
add.l d7,a1
.2 cmp.l a2,a0
bne .1
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
and.l d5,d0
lsl.l #2,d0
and.l d5,d2
or.l d0,d2
move.l a4,(-4,a1,d7.l*2)
and.l d5,d1
lsl.l #2,d1
and.l d5,d3
or.l d1,d3
move.l #$55555555,d5
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d2,a5
move.l d3,a6
lea ([C2P_PlanarBufferAddress,pc],d7.l*4),a1
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.3 move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
and.l d5,d0
lsl.l #2,d0
and.l d5,d2
or.l d0,d2
and.l d5,d1
lsl.l #2,d1
and.l d5,d3
or.l d1,d3
move.l #$55555555,d5
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d2,a5
move.l d3,a6
sub.l #1,d6
bne .4
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*4),a1
add.l d7,a1
add.l d7,a1
.4 cmp.l a2,a0
bne .3
move.l a6,(a1)
move.l a5,(a1,d7.l)
movem.l (sp)+,d2-d7/a2-a6
rts
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - Line Skip Buffer Address
* d0.l - Bitplane Byte Width
d_6 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_DeltaBufferAddress)
move.l a2,(C2P_PlanarBufferAddress)
move.l a3,(C2P_LineSkipBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a4
move.l a4,(C2P_ChunkyBufferEndAddress)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_DeltaBufferAddress,pc),a1
move.l (C2P_PlanarBufferAddress,pc),a2
move.l (C2P_LineSkipBufferAddress,pc),a3
move.l (C2P_BitplaneByteWidth,pc),d7
.12 tst.b (a3)+
beq .14
add.l #CHUNKY_BUFFER_WIDTH,a0
add.l #CHUNKY_BUFFER_WIDTH,a1
lea (a2,d7.l*4),a2
add.l d7,a2
add.l d7,a2
bra .13
.14 move.l #CHUNKY_BUFFER_WIDTH/32,d6
.11 cmp.l (a0)+,(a1)+
bne .1
cmp.l (a0)+,(a1)+
bne .2
cmp.l (a0)+,(a1)+
bne .3
cmp.l (a0)+,(a1)+
bne .4
cmp.l (a0)+,(a1)+
bne .5
cmp.l (a0)+,(a1)+
bne .6
cmp.l (a0)+,(a1)+
bne .7
cmp.l (a0)+,(a1)+
bne .8
.10 add.l #4,a2
sub.l #1,d6
bne .11
lea (-CHUNKY_BUFFER_WIDTH/8,a2,d7.l*4),a2
add.l d7,a2
add.l d7,a2
.13 cmp.l (C2P_ChunkyBufferEndAddress,pc),a0
bne .12
movem.l (sp)+,d2-d7/a2-a6
rts
.1 sub.l #1*4,a0
add.l #7*4,a1
bra .9
.2 sub.l #2*4,a0
add.l #6*4,a1
bra .9
.3 sub.l #3*4,a0
add.l #5*4,a1
bra .9
.4 sub.l #4*4,a0
add.l #4*4,a1
bra .9
.5 sub.l #5*4,a0
add.l #3*4,a1
bra .9
.6 sub.l #6*4,a0
add.l #2*4,a1
bra .9
.7 sub.l #7*4,a0
add.l #1*4,a1
bra .9
.8 sub.l #8*4,a0
add.l #0*4,a1
bra .9
.9 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d1,(a2,d7.l*2)
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a4
move.l d2,a5
move.l d3,a6
sub.l #8*4,a0
move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a2)
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(a2,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
and.l d5,d0
lsl.l #2,d0
and.l d5,d2
or.l d0,d2
add.l d7,a2
move.l a4,(a2,d7.l*2)
sub.l d7,a2
and.l d5,d1
lsl.l #2,d1
and.l d5,d3
or.l d1,d3
move.l #$55555555,d5
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lea (a2,d7.l*4),a2
move.l d2,(a2,d7.l)
lsl.l #1,d4
eor.l d4,d3
move.l d3,(a2)
sub.l d7,a2
sub.l d7,a2
sub.l d7,a2
sub.l d7,a2
bra .10
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitplane Byte Width
f_7 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_PlanarBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_PlanarBufferAddress,pc),a1
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a2
move.l (C2P_BitplaneByteWidth,pc),d7
move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.1 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
sub.l #1,d6
bne .2
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*8),a1
sub.l d7,a1
.2 cmp.l a2,a0
bne .1
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #1,d0
and.l d5,d1
or.l d0,d1
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d1,a4
move.l d2,a5
move.l d3,a6
lea ([C2P_PlanarBufferAddress,pc],d7.l*4),a1
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.3 move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #1,d0
and.l d5,d1
or.l d0,d1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d1,a4
move.l d2,a5
move.l d3,a6
sub.l #1,d6
bne .4
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*8),a1
sub.l d7,a1
.4 cmp.l a2,a0
bne .3
move.l a6,(a1)
move.l a5,(a1,d7.l)
move.l a4,(a1,d7.l*2)
movem.l (sp)+,d2-d7/a2-a6
rts
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - Line Skip Buffer Address
* d0.l - Bitplane Byte Width
d_7 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_DeltaBufferAddress)
move.l a2,(C2P_PlanarBufferAddress)
move.l a3,(C2P_LineSkipBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a4
move.l a4,(C2P_ChunkyBufferEndAddress)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_DeltaBufferAddress,pc),a1
move.l (C2P_PlanarBufferAddress,pc),a2
move.l (C2P_LineSkipBufferAddress,pc),a3
move.l (C2P_BitplaneByteWidth,pc),d7
.12 tst.b (a3)+
beq .14
add.l #CHUNKY_BUFFER_WIDTH,a0
add.l #CHUNKY_BUFFER_WIDTH,a1
lea (a2,d7.l*8),a2
sub.l d7,a2
bra .13
.14 move.l #CHUNKY_BUFFER_WIDTH/32,d6
.11 cmp.l (a0)+,(a1)+
bne .1
cmp.l (a0)+,(a1)+
bne .2
cmp.l (a0)+,(a1)+
bne .3
cmp.l (a0)+,(a1)+
bne .4
cmp.l (a0)+,(a1)+
bne .5
cmp.l (a0)+,(a1)+
bne .6
cmp.l (a0)+,(a1)+
bne .7
cmp.l (a0)+,(a1)+
bne .8
.10 add.l #4,a2
sub.l #1,d6
bne .11
lea (-CHUNKY_BUFFER_WIDTH/8,a2,d7.l*8),a2
sub.l d7,a2
.13 cmp.l (C2P_ChunkyBufferEndAddress,pc),a0
bne .12
movem.l (sp)+,d2-d7/a2-a6
rts
.1 sub.l #1*4,a0
add.l #7*4,a1
bra .9
.2 sub.l #2*4,a0
add.l #6*4,a1
bra .9
.3 sub.l #3*4,a0
add.l #5*4,a1
bra .9
.4 sub.l #4*4,a0
add.l #4*4,a1
bra .9
.5 sub.l #5*4,a0
add.l #3*4,a1
bra .9
.6 sub.l #6*4,a0
add.l #2*4,a1
bra .9
.7 sub.l #7*4,a0
add.l #1*4,a1
bra .9
.8 sub.l #8*4,a0
add.l #0*4,a1
bra .9
.9 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d1,(a2,d7.l*2)
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a4
move.l d2,a5
move.l d3,a6
sub.l #8*4,a0
move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a2)
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(a2,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
add.l d7,a2
move.l a4,(a2,d7.l*2)
sub.l d7,a2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
and.l d5,d0
lsl.l #1,d0
and.l d5,d1
or.l d0,d1
lea (a2,d7.l*4),a2
move.l d1,(a2,d7.l*2)
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
move.l d2,(a2,d7.l)
lsl.l #1,d4
eor.l d4,d3
move.l d3,(a2)
sub.l d7,a2
sub.l d7,a2
sub.l d7,a2
sub.l d7,a2
bra .10
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Planar Buffer Address
* d0.l - Bitplane Byte Width
f_8 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_PlanarBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_PlanarBufferAddress,pc),a1
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a2
move.l (C2P_BitplaneByteWidth,pc),d7
move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.1 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
sub.l #1,d6
bne .2
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*8),a1
.2 cmp.l a2,a0
bne .1
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
lea ([C2P_PlanarBufferAddress,pc],d7.l*4),a1
move.l #CHUNKY_BUFFER_WIDTH/32,d6
.3 move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a1)+
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(-4,a1,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l a4,(-4,a1,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
add.l d7,a1
move.l a3,(-4,a1,d7.l*2)
sub.l d7,a1
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a3
move.l d1,a4
move.l d2,a5
move.l d3,a6
sub.l #1,d6
bne .4
move.l #CHUNKY_BUFFER_WIDTH/32,d6
lea (-CHUNKY_BUFFER_WIDTH/8,a1,d7.l*8),a1
.4 cmp.l a2,a0
bne .3
move.l a6,(a1)
move.l a5,(a1,d7.l)
move.l a4,(a1,d7.l*2)
add.l d7,a1
move.l a3,(a1,d7.l*2)
movem.l (sp)+,d2-d7/a2-a6
rts
*-------------------------------------------------------------------------------
* IN: a0.l - Chunky Buffer Address
* a1.l - Delta Buffer Address
* a2.l - Planar Buffer Address
* a3.l - Line Skip Buffer Address
* d0.l - Bitplane Byte Width
d_8 movem.l d2-d7/a2-a6,-(sp)
move.l a0,(C2P_ChunkyBufferAddress)
move.l a1,(C2P_DeltaBufferAddress)
move.l a2,(C2P_PlanarBufferAddress)
move.l a3,(C2P_LineSkipBufferAddress)
move.l d0,(C2P_BitplaneByteWidth)
lea (CHUNKY_BUFFER_WIDTH*CHUNKY_BUFFER_HEIGHT,a0),a4
move.l a4,(C2P_ChunkyBufferEndAddress)
move.l (C2P_ChunkyBufferAddress,pc),a0
move.l (C2P_DeltaBufferAddress,pc),a1
move.l (C2P_PlanarBufferAddress,pc),a2
move.l (C2P_LineSkipBufferAddress,pc),a3
move.l (C2P_BitplaneByteWidth,pc),d7
.12 tst.b (a3)+
beq .14
add.l #CHUNKY_BUFFER_WIDTH,a0
add.l #CHUNKY_BUFFER_WIDTH,a1
lea (a2,d7.l*8),a2
bra .13
.14 move.l #CHUNKY_BUFFER_WIDTH/32,d6
.11 cmp.l (a0)+,(a1)+
bne .1
cmp.l (a0)+,(a1)+
bne .2
cmp.l (a0)+,(a1)+
bne .3
cmp.l (a0)+,(a1)+
bne .4
cmp.l (a0)+,(a1)+
bne .5
cmp.l (a0)+,(a1)+
bne .6
cmp.l (a0)+,(a1)+
bne .7
cmp.l (a0)+,(a1)+
bne .8
.10 add.l #4,a2
sub.l #1,d6
bne .11
lea (-CHUNKY_BUFFER_WIDTH/8,a2,d7.l*8),a2
.13 cmp.l (C2P_ChunkyBufferEndAddress,pc),a0
bne .12
movem.l (sp)+,d2-d7/a2-a6
rts
.1 sub.l #1*4,a0
add.l #7*4,a1
bra .9
.2 sub.l #2*4,a0
add.l #6*4,a1
bra .9
.3 sub.l #3*4,a0
add.l #5*4,a1
bra .9
.4 sub.l #4*4,a0
add.l #4*4,a1
bra .9
.5 sub.l #5*4,a0
add.l #3*4,a1
bra .9
.6 sub.l #6*4,a0
add.l #2*4,a1
bra .9
.7 sub.l #7*4,a0
add.l #1*4,a1
bra .9
.8 sub.l #8*4,a0
add.l #0*4,a1
bra .9
.9 move.l #$0F0F0F0F,d5
move.l (a0)+,d0
and.l d5,d0
lsl.l #4,d0
move.l (a0)+,d1
and.l d5,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
lsl.l #4,d1
move.l (a0)+,d2
and.l d5,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
lsl.l #4,d2
move.l (a0)+,d3
and.l d5,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
lsl.l #4,d3
move.l (a0)+,d4
and.l d5,d4
or.l d4,d3
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #1,d4
eor.l d4,d1
move.l d1,(a2,d7.l*2)
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #1,d4
eor.l d4,d3
move.l d0,a4
move.l d2,a5
move.l d3,a6
sub.l #8*4,a0
move.l #$F0F0F0F0,d5
move.l (a0)+,d0
and.l d5,d0
move.l (a0)+,d1
and.l d5,d1
lsr.l #4,d1
or.l d1,d0
move.l (a0)+,d1
and.l d5,d1
move.l (a0)+,d2
and.l d5,d2
lsr.l #4,d2
or.l d2,d1
move.l (a0)+,d2
and.l d5,d2
move.l (a0)+,d3
and.l d5,d3
lsr.l #4,d3
or.l d3,d2
move.l (a0)+,d3
and.l d5,d3
move.l (a0)+,d4
and.l d5,d4
lsr.l #4,d4
or.l d4,d3
move.l a6,(a2)
move.w d2,d4
move.w d0,d2
swap d2
move.w d2,d0
move.w d4,d2
move.w d3,d4
move.w d1,d3
swap d3
move.w d3,d1
move.w d4,d3
move.l #$00FF00FF,d5
move.l d1,d4
lsr.l #8,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #8,d4
eor.l d4,d1
move.l a5,(a2,d7.l)
move.l d3,d4
lsr.l #8,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
lsl.l #8,d4
eor.l d4,d3
move.l #$33333333,d5
move.l d2,d4
lsr.l #2,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lsl.l #2,d4
eor.l d4,d2
add.l d7,a2
move.l a4,(a2,d7.l*2)
move.l d3,d4
lsr.l #2,d4
eor.l d1,d4
and.l d5,d4
eor.l d4,d1
lsl.l #2,d4
eor.l d4,d3
move.l #$55555555,d5
move.l d1,d4
lsr.l #1,d4
eor.l d0,d4
and.l d5,d4
eor.l d4,d0
lea (a2,d7.l*4),a2
move.l d0,(a2,d7.l*2)
sub.l d7,a2
lsl.l #1,d4
eor.l d4,d1
move.l d1,(a2,d7.l*2)
move.l d3,d4
lsr.l #1,d4
eor.l d2,d4
and.l d5,d4
eor.l d4,d2
move.l d2,(a2,d7.l)
lsl.l #1,d4
eor.l d4,d3
move.l d3,(a2)
sub.l d7,a2
sub.l d7,a2
sub.l d7,a2
sub.l d7,a2
bra .10
*-------------------------------------------------------------------------------
*-------------------------------------------------------------------------------
cnop 0,4
C2P_ChunkyBufferAddress dc.l 0
C2P_DeltaBufferAddress dc.l 0
C2P_PlanarBufferAddress dc.l 0
C2P_LineSkipBufferAddress dc.l 0
C2P_BitplaneByteWidth dc.l 0
C2P_ChunkyBufferEndAddress dc.l 0
C2P_FullRoutine dc.l 0
C2P_DeltaRoutine dc.l 0